#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
int is_running = 1;


void use_resource()
{
    printf("使用资源\n");
}

void release_resource()
{
    printf("释放资源\n");
}

void handle_callback(int signum)
{
    //1.1不注册信号处理函数，按CTRL+C或者kill,直接退出进程，说明默认注册了SIGINT和SIGTERM信号处理函数
    //1.2注册信号处理函数，按CTRL+C或者kill,程序会执行信号处理函数，然后退出进程，说明默认注册了SIGINT和SIGTERM信号处理函数
    if (signum==SIGINT)
    {
        printf("收到SIGINT信号\n");
        release_resource(); // 释放资源
        exit(EXIT_SUCCESS);  // 手动退出程序
    }
    else if (signum==SIGTERM)
    {
        printf("收到SIGTERM信号\n");
        release_resource(); // 释放资源
        exit(EXIT_SUCCESS);
    }
}


/**
 * @brief 程序主函数，负责注册信号处理函数，使用资源并在循环中保持程序运行，直到信号触发退出。
 * 
 * @param argc 命令行参数的数量
 * @param argv 命令行参数的字符串数组
 * @return int 程序退出状态码，0 表示正常退出
 */
int main(int argc, char const *argv[])
{
    // 注册信号处理函数，当接收到 SIGINT 信号（通常由 CTRL+C 触发）时，调用 handle_callback 函数
    signal(SIGINT, handle_callback);  //  CTRL+C
    // 注册信号处理函数，当接收到 SIGTERM 信号（通常由 kill 命令触发）时，调用 handle_callback 函数
    signal(SIGTERM, handle_callback); // kill
    
    // 调用函数使用资源
    use_resource();

    // 当 is_running 为 1 时，程序持续运行
    while (is_running)
    {
        // 输出程序正在运行的信息
        printf("正在运行\n");
        // 程序暂停 1 秒
        sleep(1);
    }
    
    // 调用函数释放资源
    release_resource();
    // 程序正常退出，返回状态码 0
    return 0;
}
